/**
 * 初始化div为复选框div，并返回一个复选框对象
 * @param param
 * param.divId 复选框的div
 * param.likeId 复选框联动的input(可选)
 * param.initInputCheckedValue 复选框初始选中值
 * param.checkboxData 复选框的数据源
 * param.key 复选框的实际值
 * param.value 复选框的显示值
 * param.continent 复选框的洲
 * param.selectedCheckboxJson 返回所用，选中值得json数组
 * param.selectedCheckboxString 返回所用，选中值的字符串
 * @return checkboxObj
 */
function initMultiCheckboxDiv(param){
	
	$("#"+param.divId).addClass("multiCheckboxDiv");
	var innerHtml = '<input type="text" class="checkedValue" onkeydown="return false;" value="'+param.initInputCheckedValue+'"/>'
		+ '<div class="checkDiv">'
		+ '<div class="jiansuo_ico"/>'
		+ '检索：<input type="text" class="searchInput"/>'
		+ '<ul class="tabHead"></ul>'
		+ '<div class="clearBoth"></div>'
		+ '<div class="checkBoxs"></div>'
		+ '</div>';
	$("#"+param.divId).append(innerHtml);
	
	window['multiCheckboxVar_'+param.divId] = {};
	window['multiCheckboxVar_'+param.divId]['selectedCheckboxJson'] = [];
	window['multiCheckboxVar_'+param.divId]['selectedCheckboxString'] = '';
	window['multiCheckboxVar_'+param.divId]['divId'] = param.divId;
	window['multiCheckboxVar_'+param.divId]['initInputCheckedValue'] = param.initInputCheckedValue;
	window['multiCheckboxVar_'+param.divId]['checkboxData'] = param.checkboxData;
	window['multiCheckboxVar_'+param.divId]['likeId'] = param.likeId;
	window['multiCheckboxVar_'+param.divId]['key'] = param.key;
	window['multiCheckboxVar_'+param.divId]['value'] = param.value;
	window['multiCheckboxVar_'+param.divId]['continent'] = param.continent;
	
	MultiCheckbox_initMultiCheckbox(window['multiCheckboxVar_'+param.divId]);
	
	return window['multiCheckboxVar_'+param.divId];
}

/**
 * 初始化复选框的事件和效果
 * @param divId
 * @return
 */
function MultiCheckbox_initMultiCheckbox(obj){
	MultiCheckbox_initCheckDiv(obj);
    MultiCheckbox_initSelectedCheckboxData(obj);
    $("#"+obj.divId + " .checkDiv ul li a").click(obj,MultiCheckbox_showCheckBox);
    $("#"+obj.divId + " .searchInput").bind('propertychange input',obj,MultiCheckbox_searchCheckbox);
    $("#"+obj.divId + " .checkDiv ul li:first a").click();
    $("#"+obj.divId + " .checkedValue").focus(obj,MultiCheckbox_showCheckDiv);
    $(document).click(obj,MultiCheckbox_hideCheckDiv);
}

/**
 * 初始化整个div
 */
function MultiCheckbox_initCheckDiv(obj){
    //初始化tab标签
    var tabs = MultiCheckbox_getContinentTypes(obj);
    for(var i=0; i<tabs.length; i++){
        var liStr = '<li><a>'+tabs[i]+'</a></li>';
        $("#"+obj.divId + " .checkDiv ul").append(liStr);
    }
}

/**
 * 显示复选框div
 * @return
 */
function MultiCheckbox_showCheckDiv(event){
    $("#"+event.data.divId + " .checkDiv").show();
}

/**
 * 隐藏复选框div
 * @return
 */
function MultiCheckbox_hideCheckDiv(event){
    var elem = event.target;
    while(elem){ //循环判断至根节点，排除子元素
        if(elem.id && elem.id==event.data.divId){
            return;
        }
        elem = elem.parentNode;
    }
    $("#"+event.data.divId + " .checkDiv").hide();
}

/**
 * 根据值初始化选中框
 * @return
 */
function MultiCheckbox_initSelectedCheckboxData(obj){
	var checkedValue = $('#'+obj.divId+' .checkedValue').val();
	var checkedValueArray = checkedValue.split(',');
	for(var i=0; i<checkedValueArray.length && checkedValueArray[i]; i++){
		for(var j=0; j<obj.checkboxData.length; j++){
			if(checkedValueArray[i] == obj.checkboxData[j][obj.value]){
				obj.selectedCheckboxJson.push(obj.checkboxData[j]);
			}
		}
	}
}

/**
 * 根据数据获取洲的类型
 * @param data
 */
function MultiCheckbox_getContinentTypes(obj){
    var continentString = '';
    var data = obj.checkboxData;
    for(var i=0; i<data.length; i++){
        if(continentString.indexOf(data[i][obj.continent]) == -1){
        	continentString += data[i][obj.continent] + ',';
        }
    }
    return continentString.replace(/,$/,'').split(',');
}

/**
 * 点击tab标签显示标签下的checkbox
 */
function MultiCheckbox_showCheckBox(event){
	var obj = event.data;
    var data = [];
    var searchValue = $("#"+obj.divId + " .searchInput").val();
    for(var i=0; i<obj.checkboxData.length; i++){
        if(obj.checkboxData[i][obj.continent] == $(this).html() && obj.checkboxData[i][obj.value].indexOf(searchValue)> -1){
            data.push({key:obj.checkboxData[i][obj.key],value:obj.checkboxData[i][obj.value]});
        }
    }
    $(this).css('color','#ffffff');
    $(this).css('background-color','#3785e5');
    $(this).parent().siblings().find("a").css('color','#003366');
    $(this).parent().siblings().find("a").css('background-color','#72b0fc');
    MultiCheckbox_createCheckboxs(obj,data);
}

/**
 * 根据搜索条件搜索
 */
function MultiCheckbox_searchCheckbox(event){
	var obj = event.data;
    var searchValue = $("#"+obj.divId + " .searchInput").val().replace(/\s+/,'');
    var continentType = (function(){
        var continent = '';
        $("#"+obj.divId + " .tabHead a").each(function(){
            if($(this).css('color') == 'rgb(255, 255, 255)' || $(this).css('color') == '#ffffff'){
                continent = $(this).html();
            }
        });
        return continent;
    })();
    var resultData = [];
    for(var i=0; i<obj.checkboxData.length; i++){
        if(obj.checkboxData[i][obj.value].indexOf(searchValue) > -1 && obj.checkboxData[i][obj.continent] == continentType){
            resultData.push({key:obj.checkboxData[i][obj.key],value:obj.checkboxData[i][obj.value]});
        }
    }
    MultiCheckbox_createCheckboxs(obj,resultData);
}

/**
 * 根据data创建checkbox
 * @param data
 */
function MultiCheckbox_createCheckboxs(obj, data){
    var columnNum = 4; //一行显示的数目
    var str = "<ul>";
    for(var i=0; i<data.length; i++){
        //已经选中的就设置为选中
        var checkedStr = "";
        if(MultiCheckbox_isSeleced(obj, data[i].key)){
            checkedStr = "checked='checked'";
        }
        //如果达到5个就换行
        if(i !==0 && i%columnNum === 0){
            str += "</ul><div class='clearBoth'></div><ul>";
        }
        str += "<li><input type='checkbox' onclick='MultiCheckbox_check(\""+obj.divId+"\",this)' "
             +checkedStr
             + " value='"+data[i].key+"'/>"+ "&nbsp;"+data[i].value+"</li>";
    }
    str += "</ul>";
    $("#"+obj.divId + " .checkBoxs").html(str);
}

/**
 * 根据key判断这个元素是否被选中了
 * @param id
 */
function MultiCheckbox_isSeleced(obj, id){
    for(var i=0; i<obj.selectedCheckboxJson.length; i++){
        if(obj.selectedCheckboxJson[i][obj.key] == id){
            return true;
        }
    }
    return false;
}

/**
 * 选中checkbox保存到全局变量
 */
function MultiCheckbox_check(divId,obj){
	var checkboxObj = window['multiCheckboxVar_'+divId];
    if($(obj).is(":checked")){
        for(var i=0; i<checkboxObj.checkboxData.length; i++){
            if(checkboxObj.checkboxData[i][checkboxObj.key] == $(obj).val()){
                //判断selectedCheckbox是否已经有,没有的话就push
                for(var j=0; j<checkboxObj.selectedCheckboxJson.length; j++){
                    if(checkboxObj.selectedCheckboxJson[j][checkboxObj.key] == $(obj).val()){
                        return;
                    }
                }
                checkboxObj.selectedCheckboxJson.push(checkboxObj.checkboxData[i]);
                break;
            }
        }
    }else{
        for(var i=0; i<checkboxObj.selectedCheckboxJson.length; i++){
            if(checkboxObj.selectedCheckboxJson[i][checkboxObj.key] == $(obj).val()){
            	checkboxObj.selectedCheckboxJson.splice(i,1);
            }
        }
    }
    //将selectedCheckbox值显示在值框中
    var valueStr = '';
    for(var i=0; i<checkboxObj.selectedCheckboxJson.length; i++){
        valueStr += checkboxObj.selectedCheckboxJson[i][checkboxObj.value] + ',';
        
    }
    valueStr = valueStr.replace(/,$/,'');
    
    checkboxObj.selectedCheckboxString = valueStr; //保存到全局对象中
    $("#"+divId+" .checkedValue").val(valueStr); //设置值框
    if(checkboxObj.likeId && $("#"+checkboxObj.likeId)){ //如果有关联框，设置关联框值
    	$("#"+checkboxObj.likeId).val(valueStr);
    }
}
